package cn.jcet.config.exception;

import cn.jcet.vo.AjaxResult;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author 鲜磊
 * @Date 2021/1/18 23:36
 */
@RestControllerAdvice
public class GlobalExceptionHandler {


    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    public AjaxResult jsonErrorHandle(MethodArgumentNotValidException e){
        // TODO 自定义封装返回错误信息
        // 定义一个集合，存放键值对
        List<Map<String,Object>> list = new ArrayList<>();
        // 获取绑定结果集
        BindingResult bindingResult = e.getBindingResult();
        // 获取全部错误
        List<FieldError> allErrors = bindingResult.getFieldErrors();

       allErrors.forEach(allError -> {
           Map<String,Object> map = new HashMap<>();
           // 封装数据类型
           map.put("defaultMessage",allError.getDefaultMessage());
           map.put("objectName",allError.getObjectName());
           // 获取字段名称
           FieldError fieldError = allError;
           map.put("field",fieldError.getField());
           list.add(map);
       });
        // 返回错误信息
        return AjaxResult.fail("后端数据校验异常",list);
    }
}
